home *** CD-ROM | disk | FTP | other *** search
/ Trading on the Edge / Trading On The Edge - CD-ROM Toolkit (Wayzata Technology)(2031)(1994).bin / pc / mac_file / vendor_d / neuralwa / nw2v50 / testiris.c < prev    next >
C/C++ Source or Header  |  1993-08-23  |  3KB  |  118 lines

  1. #include <stdio.h>
  2.  
  3. /****************************************************************
  4.  *
  5.  *  This is a simple test program to test out Flash Code for the
  6.  *  IRIS problem.  To use it, do the following:
  7.  *
  8.  *  - In NeuralWorks create your favorite network to solve the IRIS
  9.  *    problem
  10.  *  - Make sure you create a classification Rate matrix
  11.  *  - Run a Test/One Pass All
  12.  *  - Note the results of the Classification rate matrix.
  13.  *  - Run flashcode and output to recall.c
  14.  *  - Compile recall.c, this module, and link the two to create
  15.  *    an executable. For example, on a UNIX system, do:
  16.  *      cc -c recall.c
  17.  *      cc -c testiris.c
  18.  *      cc testiris.o recall.o -o testiris -lm
  19.  *  - Run the compiled program. It should output a classification
  20.  *    Rate matrix which is identical to NeuralWorks.
  21.  *
  22.  *****************************************************************
  23.  */
  24.  
  25. /* Note that this assumes iris_tes has records of the form:
  26.  
  27.    0.165  0.416  0.067  0.043
  28. &    1.0    0.0    0.0
  29.  
  30. */
  31.  
  32.  
  33.  
  34. main( )
  35. {
  36.    FILE *fp;
  37.    float ibuf[4];
  38.    float dbuf[3];
  39.    float obuf[3];
  40.    float cmat[3][3];
  41.    float cmatdx[3];
  42.    float dval, oval;
  43.    int   nsamp;
  44.    int   wx, dx, ox;
  45.    char  sbuf[102];
  46.  
  47.    if ((fp=fopen("iris_tes.nna", "r"))== (FILE *)0)
  48.       exit(1);
  49.  
  50.    nsamp = 0;
  51.    for (ox = 0; ox < 3; ox++) {
  52.       cmatdx[ox] = 0.0;
  53.       for (dx=0; dx < 3; dx++)
  54.          cmat[ox][dx] = 0.0;
  55.    }
  56.  
  57.    while (fgets(sbuf, 100, fp) != (char *)0) {
  58.       if (sscanf(sbuf, "%f %f %f %f", &ibuf[0],&ibuf[1],&ibuf[2],&ibuf[3])
  59.           != 4)
  60.          goto read_err;
  61.       fgets(sbuf, 100, fp); /* output line */
  62.       if (sscanf(sbuf, "& %f %f %f", &dbuf[0],&dbuf[1],&dbuf[2])
  63.           != 3)
  64.          goto read_err;
  65.  
  66.       NN_Recall( (void *)0, ibuf, obuf );
  67.  
  68.       /* Find index of desired class */
  69.       dval = oval = -10000.0;
  70.       for (wx=0; wx < 3; wx++) {
  71.          if (dbuf[wx] > dval) {
  72.             dval = dbuf[wx];
  73.             dx   = wx;
  74.          }
  75.          if (obuf[wx] > oval) {
  76.             oval = obuf[wx];
  77.             ox   = wx;
  78.          }
  79.       }
  80.  
  81.       cmat[ox][dx] += 1.0;
  82.       cmatdx[dx]   += 1.0;
  83.       nsamp++;
  84.  
  85.    }
  86.  
  87.    if (nsamp != 0) {
  88.       float avcrt = 0.0;
  89.  
  90.       for (ox = 2; ox>=0; ox--) {
  91.          printf("\n");
  92.  
  93.          if (cmatdx[ox] > 0.1)
  94.             cmatdx[ox] = 1.0/cmatdx[ox];
  95.  
  96.          for (dx=0; dx < 3; dx++) {
  97.             float wr;
  98.  
  99.             wr = cmat[ox][dx] * cmatdx[ox];
  100.             printf("  %f", wr);
  101.  
  102.             if (dx == ox)
  103.                avcrt += wr;
  104.          }
  105.       }
  106.       printf("\n\n *** Average Classifiation Rate = %f ***\n\n",
  107.              avcrt/3.0);
  108.    } else
  109.       printf("No samples found\n");
  110.  
  111.    exit(0);
  112.  
  113.  read_err:
  114.    printf("Error reading file <iris_tes.nna>\n");
  115.    exit(1);
  116. }
  117.  
  118.